<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>AngelScript: Registering global properties</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">AngelScript
   
   </div>
   
  </td>
  
  
  
   
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('doc_register_prop.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">Registering global properties </div>  </div>
</div>
<div class="contents">
<div class="textblock"><p>By registering global properties with the script engine you can allow the scripts to inspect and/or modify variables within the application directly, without the need to write special functions to do this.</p>
<p>To register the property, you just need to call the <a class="el" href="classas_i_script_engine.html#aacd32f32b2922b8ffaed204812013169">RegisterGlobalProperty</a> method, passing the declaration and a pointer to the property. Remember that the registered property must stay alive as long as its registration is valid in the engine.</p>
<div class="fragment"><pre class="fragment"><span class="comment">// Variables that should be accessible through the script.</span>
<span class="keywordtype">int</span>      g_number       = 0;
CObject *g_object       = 0;
Vector3  g_vector       = {0,0,0};
<span class="keywordtype">bool</span>     g_readOnlyFlag = <span class="keyword">false</span>;

<span class="comment">// A function to register the global properties. </span>
<span class="keywordtype">void</span> RegisterProperties(<a class="code" href="classas_i_script_engine.html" title="The engine interface.">asIScriptEngine</a> *engine)
{
    <span class="keywordtype">int</span> r;
    
    <span class="comment">// Register a primitive property that can be read and written to from the script.</span>
    r = engine-&gt;<a class="code" href="classas_i_script_engine.html#aacd32f32b2922b8ffaed204812013169" title="Registers a global property.">RegisterGlobalProperty</a>(<span class="stringliteral">&quot;int g_number&quot;</span>, &amp;g_number); assert( r &gt;= 0 );
    
    <span class="comment">// Register variable where the script can store a handle to a CObject type. </span>
    <span class="comment">// Assumes that the CObject type has been registered with the engine already as a reference type.</span>
    r = engine-&gt;<a class="code" href="classas_i_script_engine.html#aacd32f32b2922b8ffaed204812013169" title="Registers a global property.">RegisterGlobalProperty</a>(<span class="stringliteral">&quot;CObject @g_object&quot;</span>, &amp;g_object); assert( r &gt;= 0 );
    
    <span class="comment">// Register a 3D vector variable.</span>
    <span class="comment">// Assumes that the Vector3 type has been registered already as a value type.</span>
    r = engine-&gt;<a class="code" href="classas_i_script_engine.html#aacd32f32b2922b8ffaed204812013169" title="Registers a global property.">RegisterGlobalProperty</a>(<span class="stringliteral">&quot;Vector3 g_vector&quot;</span>, &amp;g_vector); assert( r &gt;= 0 );
    
    <span class="comment">// Register a boolean flag that can be read, but not modified by the script.</span>
    r = engine-&gt;<a class="code" href="classas_i_script_engine.html#aacd32f32b2922b8ffaed204812013169" title="Registers a global property.">RegisterGlobalProperty</a>(<span class="stringliteral">&quot;const bool g_readOnlyFlag&quot;</span>, &amp;g_readOnlyFlag); assert( r &gt;= 0 );
}
</pre></div><p>It is also possible to expose properties through <a class="el" href="doc_script_class_prop.html">property accessors</a>, which are a pair of functions with the prefixes get_ and set_ for getting and setting the property value. These functions should be registered with registered with <a class="el" href="doc_register_func.html">RegisterGlobalFunction</a>. This is especially useful when the offset of the property cannot be determined, or if the type of the property is not registered in the script and some translation must occur, i.e. from char* to string.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="doc_register_type.html">Registering an object type</a> </dd></dl>
</div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>

    <li class="footer">Generated on Sun Jan 29 2012 15:41:04 for AngelScript by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
   </ul>
 </div>


</body>
</html>
